package com.group01.vo.Category;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * @Description 商品分类分页VO
 * @Author 翟玉龙
 * @Date 2024/6/21
 */
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@Data
public class CategoryGetPageVO {
    /**
     * 商品分类id
     */
    private Integer id;

    /**
     * 父级分类id
     */
    private Integer parentId;

    /**
     * 子级分类列表
     */
    private List<CategoryGetPageVO> children = new ArrayList<>();

    /**
     * 商品分类名字
     */
    private String name;

    /**
     * 商品分类描述
     */
    private String description;


    /**
     * 构建商品分类树形结构
     * @param categories 商品分类列表
     * @return 商品分类树形结构列表
     */
    public static List<CategoryGetPageVO> buildCategoryTree(List<CategoryGetPageVO> categories) {
        return categories.stream()
                .filter(category -> category.getParentId() == null)
                .peek(category -> buildSubTree(category, categories))
                .collect(Collectors.toList());
    }

    /**
     * 递归构建商品分类树形结构
     * @param category 当前商品分类
     * @param categories 商品分类列表
     */
    private static void buildSubTree(CategoryGetPageVO category, List<CategoryGetPageVO> categories) {
        categories.stream()
                .filter(c -> c.getParentId() != null && Objects.equals(c.getParentId(), category.getId()))
                .forEach(child -> {
                    category.getChildren().add(child);
                    buildSubTree(child, categories);
                });
    }
}
